home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue42 / system / UCAniIconEdit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-12-30  |  3.6 KB  |  139 lines

  1. unit UCAniIconEdit;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ExtDlgs, ExtCtrls, StdCtrls, UCAniIcon, DsgnIntf;
  8.  
  9. type
  10.     TAniIconEditorDialog = class(TForm)
  11.         OKButton: TButton;
  12.         CancelButton: TButton;
  13.         GroupBox1: TGroupBox;
  14.         ImagePanel: TPanel;
  15.         ImagePaintBox: TPaintBox;
  16.         Load: TButton;
  17.         Save: TButton;
  18.         Clear: TButton;
  19.         OpenDialog: TOpenPictureDialog;
  20.         SaveDialog: TSavePictureDialog;
  21.         Timer1: TTimer;
  22.         procedure ClearClick(Sender: TObject);
  23.         procedure FormCreate(Sender: TObject);
  24.         procedure FormDestroy(Sender: TObject);
  25.         procedure LoadClick(Sender: TObject);
  26.         procedure SaveClick(Sender: TObject);
  27.         procedure Timer1Timer(Sender: TObject);
  28.         private
  29.         { Private declarations }
  30.         Icon: TAniIcon;
  31.     public
  32.         { Public declarations }
  33.         procedure Reset;
  34.     end;
  35.  
  36.     TAniIconPropertyEditor = class (TClassProperty)
  37.     public
  38.         function GetValue: String; override;
  39.         function GetAttributes: TPropertyAttributes; override;
  40.         procedure SetValue (const Value: string); override;
  41.         procedure Edit; override;
  42.     end;
  43.  
  44. implementation
  45.  
  46. {$R *.DFM}
  47.  
  48. { TAniIconEditorDialog }
  49.  
  50. procedure TAniIconEditorDialog.FormCreate(Sender: TObject);
  51. begin
  52.     Icon := TAniIcon.Create;
  53.     Save.Enabled := False;
  54. end;
  55.  
  56. procedure TAniIconEditorDialog.FormDestroy(Sender: TObject);
  57. begin
  58.     Icon.Free;
  59. end;
  60.  
  61. procedure TAniIconEditorDialog.ClearClick (Sender: TObject);
  62. begin
  63.     Timer1.Enabled := False;
  64.     Save.Enabled := False;
  65.     Clear.Enabled := False;
  66.     Icon.Clear;
  67.     ImagePaintBox.Invalidate;
  68. end;
  69.  
  70. procedure TAniIconEditorDialog.LoadClick (Sender: TObject);
  71. begin
  72.     if OpenDialog.Execute then begin
  73.         Icon.LoadFromFile (OpenDialog.Filename);
  74.         Reset;
  75.     end;
  76. end;
  77.  
  78. procedure TAniIconEditorDialog.Reset;
  79. begin
  80.     Icon.BackgroundColor := ImagePaintBox.Color;
  81.     ImagePaintBox.Invalidate;
  82.     Save.Enabled := not Icon.Empty;
  83.     Clear.Enabled := not Icon.Empty;
  84.     Timer1.Enabled := not Icon.Empty;
  85. end;
  86.  
  87. procedure TAniIconEditorDialog.SaveClick(Sender: TObject);
  88. begin
  89.     if (Icon.Empty = False) and SaveDialog.Execute then
  90.         Icon.SaveToFile (SaveDialog.Filename);
  91. end;
  92.  
  93. procedure TAniIconEditorDialog.Timer1Timer(Sender: TObject);
  94. var
  95.     r: TRect;
  96. begin
  97.     if not Icon.Empty then begin
  98.         Icon.Animate;
  99.         r := Rect (0, 0, Icon.Width, Icon.Height);
  100.         OffsetRect (r, (ImagePaintBox.Width - Icon.Width) div 2,
  101.                        (ImagePaintBox.Height - Icon.Height) div 2);
  102.         Icon.Draw (ImagePaintBox.Canvas, r);
  103.     end;
  104. end;
  105.  
  106. { TAniIconPropertyEditor }
  107.  
  108. function TAniIconPropertyEditor.GetValue: String;
  109. var
  110.     Icon: TAniIcon;
  111. begin
  112.     Icon := TAniIcon (GetOrdValue);
  113.     if Icon.Empty then Result := '(None)' else Result := '(' + Icon.ClassName + ')';
  114. end;
  115.  
  116. function TAniIconPropertyEditor.GetAttributes: TPropertyAttributes;
  117. begin
  118.     Result := [paDialog];
  119. end;
  120.  
  121. procedure TAniIconPropertyEditor.SetValue (const Value: string);
  122. begin
  123.     if Value = '' then SetOrdValue (0);
  124. end;
  125.  
  126. procedure TAniIconPropertyEditor.Edit;
  127. begin
  128.     with TAniIconEditorDialog.Create (Nil) do try
  129.         Icon.Assign (TAniIcon (GetOrdValue));  Reset;
  130.         if ShowModal = mrOK then TAniIcon (GetOrdValue).Assign (Icon);
  131.     finally
  132.         Free;
  133.     end;
  134. end;
  135.  
  136. initialization
  137.     RegisterPropertyEditor (TypeInfo (TAniIcon), Nil, '', TAniIconPropertyEditor);
  138. end.
  139.